package fenetre;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import composantes.*;
import interfaces.Grille;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.border.LineBorder;

public class TabJeu extends JPanel implements ActionListener{
	
	private Partie 		_p;
	
	private JButton[][] _btnGrille;
	private JButton		_btnUpdate,
						_btnReset;
	private JLabel		_src,
						_dst,
						_tour;
	
	private void init(String nomPartie, int nbJoueur, int nbEnergie , int dimX, int dimY) throws Exception{
		_btnUpdate = new JButton("Update");
		_btnReset = new JButton("Reset");
		_src = new JLabel();
		_dst = new JLabel();
		_tour = new JLabel();
		
		_btnUpdate.addActionListener(this);
		_btnReset.addActionListener(this);
		_p = new Partie();
		build(nomPartie, nbJoueur, nbEnergie, dimX, dimY);
	}
	
	public TabJeu(String nomPartie, int nbJoueur, int nbEnergie , int dimX, int dimY) throws Exception{
		init(nomPartie, nbJoueur, nbEnergie, dimX, dimY);
	}
	
	private void build(String nomPartie, int nbJoueur, int nbEnergie , int dimX, int dimY) throws Exception{		
		Dimension dim = new Dimension(dimX, dimY);
		_p.initialiserPartie(nomPartie, nbJoueur, nbEnergie, dim);
		_tour.setText("Au tour des rouges de jouer");
		_tour.setForeground(Color.red);
		
		JPanel panTour = new JPanel();
		panTour.setAlignmentX(CENTER_ALIGNMENT);
		JPanel panGrille = new JPanel(new GridLayout(dim.height, dim.width));
		JPanel panBoutons = new JPanel(new FlowLayout());
		setLayout(new BorderLayout());
		
		panTour.add(_tour);
		
		_btnGrille = new JButton[dim.height][dim.width];
		for(int i = 0; i < dim.height; i++)
			for(int j = 0; j < dim.width; j++){
				_btnGrille[i][j] = new JButton();
				_btnGrille[i][j].setBackground(_p.getPlaqueCellulaire().getColor(i, j));
				_btnGrille[i][j].setBorder(new LineBorder(Color.gray, 1));
				_btnGrille[i][j].setOpaque(true);
				_btnGrille[i][j].addActionListener(this);
				panGrille.add(_btnGrille[i][j]);
			}
		panBoutons.add(_btnUpdate);
		panBoutons.add(_btnReset);
		panBoutons.add(_src);
		panBoutons.add(_dst);

		add(panTour, BorderLayout.NORTH);
		add(panGrille, BorderLayout.CENTER);
		add(panBoutons, BorderLayout.SOUTH);
	}
	
	private void synchroniser(){
		PlaqueCellulaire p = _p.getPlaqueCellulaire();
		
		for(int i = 0; i < p.getHauteur(); i++){
			for(int j = 0; j < p.getLargeur(); j++){
				_btnGrille[i][j].setBackground(p.getColor(i, j));
			}
		}
	}
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		try{
			switch(arg0.getActionCommand()){
			case "Update":
				if(_p.transfertPossible())
					_p.transferer();
				break;
			case "Reset":
				_p.getPlaqueCellulaire().clear();
				break;
			default:
				JButton btn = (JButton) arg0.getSource();
				int hauteur = _p.getPlaqueCellulaire().getHauteur();
				int largeur = _p.getPlaqueCellulaire().getLargeur();
				
				for(int i = 0; i < hauteur; i++)
					for(int j = 0; j < largeur; j++)
						if(btn == _btnGrille[i][j]){
							_p.clic(i, j);
							if(_p.transfertPossible()){
								_p.transferer();
								if(_p.partieTerminee() || _p.atteintScore() >= 0){
									FenetreBD fen = new FenetreBD(_p.get_score(), _p.get_nbJoueur());
								}
							}
						}
				if(_p.getTour() == 0){
					_tour.setText("Au tour des rouges de jouer");
					_tour.setForeground(Color.red);
				}
				else if(_p.getTour() == 1){
					_tour.setText("Au tour des verts de jouer");
					_tour.setForeground(Color.green);
				}
				else if(_p.getTour() == 2){
					_tour.setText("Au tour des bleus de jouer");
					_tour.setForeground(Color.blue);
				}
				else{
					_tour.setText("Au tour des jaunes de jouer");
					_tour.setForeground(Color.yellow);
				}
			}
		}catch(Exception e){
			System.out.println(e.getMessage());
		}
		synchroniser();
	}
}
